import axios from "axios"
import qs from "querystring"

/**
 * 错误信息的处理
 */
const errorHandle = (status, info) => {
    switch (status) {
        case 400:
            console.log("服务器收到客户端通过PUT或者POST请求提交的表示，表示的格式正确，但服务器不懂它什么意思");
            break;
        case 401:
            console.log("客户端试图对一个受保护的资源进行操作，却又没有提供正确的认证证书");
            break;
        case 403:
            console.log("客户端请求的结构正确，但是服务器不想处理它");
            break;
        case 404:
            console.log("资源被围定义(网络请求地址错误)");
            break;
        case 500:
            console.log("执行请求处理代码时遇到了异常，它们就发送此响应代码");
            break;
        case 503:
            console.log("最可能的原因是资源不足：服务器突然收到太多请求，以至于无法全部处理");
            break;
        default:
            console.log(info)
    }
}


/**
 * 创建自己的Axios实例对象
 */
var instance = axios.create({
    // 公共配置
    timeout: 5000
})

/**
 * 请求拦截
 */
instance.interceptors.request.use(
    config => {
        if (config.method === "post") {
            config.data = qs.stringify(config.data)
        }
        return config;
    },
    error => Promise.reject(error)
)

/**
 * 相应拦截
 */
instance.interceptors.response.use(
    // 网络请求完成
    response => response.status === 200 ? Promise.resolve(response) : Promise.reject(response),
    // 网络请求未完成
    /**
     * 400 / 404  / 500 / 502
     */
    error => {
        /**
         * response.status,response.data
         */
        const { response } = error
        if(response){
            errorHandle(response.status, response.data)
        }else{
            console.log("请求无响应")
        }
    }
)


export default instance